<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
</head>

<body>
    <script>
        let num = 10;
        let num2 = new Number(20);
        let arr = [1, 2, 3];
        console.log(typeof num);
        console.log(typeof arr);
        //1.typeof 只能检测基本数据类型 null检测出来也是object

        console.log(num2 instanceof Number);
        console.log(arr instanceof Array);
        //2.instanceof 检测引用数据类型用的比较多 因为基本数据类型必须是 用构造函数定义的才能检测出来

        console.log(num.__proto__.constructor == Number);
        //3.用constructor检测 数据类型 用实例的隐式原型 上的构造函数constructor判断

        // 4.toString 方法是 object的方法 所以任何东西都能用这个方法也可以用这个方法检测数据类型
        console.log(Object.prototype.toString.call(num));

        console.log(Array.prototype);
        console.log(arr.__proto__);
        //这上面放的就是数组的方法

        let str = "hello world";
        let str1 = "world";
        String.prototype.upper = function() {
            console.log(this[0].toUpperCase());
        };
        let res = str.upper();
        let res2 = str1.upper();
        //思考 自己扩充一个字符串的方法 让字符串的首字母变成大写 能够被所有的字符串使用
    </script>
</body>

</html>